package com.xue.zuoye0214;

public class TestCompany {
    public static void main(String[] args){
        //定义一个(父类类型的)员工数组   用父类指代子类
        ColaEmployee[] arrEmps=new ColaEmployee[3];
        //创建员工进入数组
        // 此处使用了多态:使用父类类型指代子类
          /*
          = 左边的类型是父类类型 ColaEmployee
          = 右边new创建的实例对象是 父类ColaEmployee子类的实例对象
 	       */
        arrEmps[0]=new SalariedEmployee("孙悟空", 5, 50000);
        arrEmps[1]=new HourlyEmployee("林黛玉",1,80,180);
        arrEmps[2] = new SalesEmployee("朱一龙", 7, 10000000, 0.01);

        //打印员工2月份的工资
        //创建Company类的一个实例对象
        Company company=new Company();
        //遍历员工列表，打印所有员工2月份的工资
        //设置打印的月份
        company.setCaculateMonth(2);
        for (int i = 0; i <arrEmps.length ; i++) {
            //设置打印员工工资类的属性
           // company.setCaculateMonth(2);
            //打印的员工
            company.setColaEmployee(arrEmps[i]);
            //打印员工工资
            company.printEmployeeSalary();
        }

        System.out.println("=======================================");
        //创建Company类的一个实例对象
        Company2 company2=new Company2();
        //遍历员工列表，打印所有员工2月份的工资
        for (int i = 0; i <arrEmps.length ; i++) {
            //打印员工工资
            // 此处使用了多态:使用父类类型指代子类
            /*
                   printEmployeeSalary方法调用时传递的参数（形参）是 子类类型
 	               printEmployeeSalary方法的实参是父类类型
 	               在方法调用时，将子类型的参数（形参）的值
 	               传递给了父类类型的方法定义的参数（实参）
 	         */
            company2.printEmployeeSalary(2,arrEmps[i]);
        }


        // 此处和作业无关，主要讲解多态的一种使用形式
        System.out.println("----------------打印单独的某个员工工资----------------------");
        // 新建一个员工对象
        SalesEmployee seZhaoliu  = new SalesEmployee("朱二龙", 2, 100000, 0.01);
        //打印该员工的工资信息
        company2.printEmployeeSalary(2,seZhaoliu);
    }

}
